/*
题目描述
恰逢 H 国国庆，国王邀请 n 位大臣来玩一个有奖游戏。首先，他让每个大臣在左、右手上面分别写下一个整数，国王自己也在左、右手上各写一个整数。然后，让这 n 位大臣排成一排，国王站在队伍的最前面。排好队后，所有的大臣都会获得国王奖赏的若干金币，每位大臣获得的金币数分别是：排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数，然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏，所以他想请你帮他重新安排一下队伍的顺序，使得获得奖赏最多的大臣，所获奖赏尽可能的少。注意，国王的位置始终在队伍的最前面。

输入格式
第一行包含一个整数 n，表示大臣的人数。

第二行包含两个整数 a 和 b，之间用一个空格隔开，分别表示国王左手和右手上的整数。

接下来 n 行，每行包含两个整数 a 和 b，之间用一个空格隔开，分别表示每个大臣左手和右手上的整数。

输出格式
一个整数，表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。
*/


//若第i个放在j前对j所获得金币 比将j放在i之前的贡献小 则将i放在j前
//i在j前对j的贡献为a[i].l/a[j].r 总结就是a[i].l/a[j].r<a[j].l/a[i].r时将i放在j前
//为避免不能整除带来的精度缺失化为相乘形式a[i].l*a[i].r<a[j].l*a[j].r

#include<bits/stdc++.h>
#define endl "\n"
#define ll long long
#define all(rq) rq.begin(),rq.end()
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)

using namespace std;
const int INF=0x3f3f3f3f;
class bigint{
private:
    string rnum;
    int size;
public:

    void delete_pre_zero(string &znum) {
        int pos=0;
        for (int i=0;i<znum.size();i++) {
            if (znum[i]-'0') {
                break;
            }else {
                pos++;
            }
        }

        znum=znum.substr(pos);
    }

    bigint operator*(const long long p){
        long long z=0;
        string ans;
        for(int i=0;i<rnum.size();i++){
            ll num=(rnum[i]-'0')*p;
            num+=z;
            z=num/10;
            num%=10;
            ans+=num+'0';
        }

        while(z){
            ans+=z%10+'0';

            z/=10;
        }

        reverse(ans.begin(),ans.end());
        return bigint(ans);
    }

    bigint operator/(const int p) {
        ll remainder=0;
        string ans;

        string num(rnum.rbegin(),rnum.rend());
        ll curr=0;
        for (int i=0;i<num.size();i++) {
            curr*=10;
            curr+=num[i]-'0';
            ans+=curr/p+'0';
            curr%=p;
        }
        delete_pre_zero(ans);

        return bigint(ans);
    }

    bool operator<(const bigint &other) const {
        if (size!=other.size) {
            return size<other.size;
        }

        string num1=out();
        string num2=other.out();
        return num1<num2;
    }

    bigint(string str){
        rnum=str;
        delete_pre_zero(rnum);
        size=rnum.size();

        if (size==0) {
            size=1;
            rnum="0";
        }
        reverse(rnum.begin(),rnum.end());
    }

    bigint(){
        size=0;
        rnum="";
    }

    string out() const {
        string num(rnum.rbegin(),rnum.rend());
        return num;
    }
};

class peo{
public:
	ll l,r;

	peo(ll l,ll r):l(l),r(r){
	}
	peo(){
	}

	bool operator<(const peo &other) const{ 
		return l*r<other.l*other.r;
	}
};
int main(){
	int n;
	cin>>n;
	vector<peo> a(n+1);
	for(int i=0;i<n+1;i++){
		cin>>a[i].l>>a[i].r;
	}
	sort(a.begin()+1,a.end());

	bigint curr(to_string(a[0].l));
	bigint ans("0");
	for(int i=1;i<n+1;i++){
		ans=max(curr/a[i].r,ans);

		curr=curr*a[i].l;
	}


	cout<<ans.out()<<endl;
	return 0;
}